#ifndef SOCIOS_H_INCLUDED
#define SOCIOS_H_INCLUDED
#include "Especial.h"
#include "Normal.h"


const int B=75;

class Socios{
    private:
        struct Nodo{
            Socio * info;
            Nodo * sig;
        };
        Nodo * Hash[B];
        int h (long int);
        // función de dispersión
        void crearLista (Nodo * &);
        // crea una lista vacía
        void destruirLista (Nodo * &);
        // destruye todo el contenido de la lista
        bool perteneceLista (Nodo *, long int);
        // indica si existe un socio con la cedula ingresado
        void insFrontEnLista (Nodo * &, Socio *);
        // inserta el socio al principio de la lista
        Socio * obtenerEnLista (Nodo *, long int);
        // obtiene el socio con la cedula ingresada
        void cargarIterador(Nodo *, Iterador * &);
        // carga el iterador con los socios de la lista de socios dada
        float recaudacionEnLista (Nodo *,float);
        // retorna la recaudacion de la lista de socios dada

        void becadoMayorEnLista (Nodo * ,long int &, Fecha &, bool &);

    public:
        Socios();
        void insert(Socio *);
        bool member(long int);
        Socio * find(long int);
        Iterador * listadoSocios();
        float recaudacion(float);
        void becadoMayorVencimiento(Socio * &, bool &);
        ~Socios();
};


#endif // SOCIOS_H_INCLUDED
